package db

import (
	"fmt"
	"time"
)

// OnFileUploadFinished 文件上传完成，更新数据库
func OnFileUploadFinished(filehash, filename string, filesize int64, fileaddr string) bool {
	file := File{
		FileHash: filehash,
		FileName: filename,
		FileSize: filesize,
		FileAddr: fileaddr,
		CreateAt: time.Now(),
		UpdateAt: time.Now(),
		Status:   0, // 正常状态
	}

	result := DB.Create(&file)
	if result.Error != nil {
		fmt.Printf("Failed to insert file: %v\n", result.Error)
		return false
	}
	return true
}

// GetFileMeta 获取文件元信息
func GetFileMeta(filehash string) (*File, error) {
	var file File
	err := DB.Where("file_hash = ? AND status = 0", filehash).First(&file).Error
	if err != nil {
		return nil, err
	}
	return &file, nil
}

// GetFileMetaList 批量获取文件元信息
func GetFileMetaList(limit int) ([]File, error) {
	var files []File
	err := DB.Where("status = 0").
		Order("create_at desc").
		Limit(limit).
		Find(&files).Error
	return files, err
}

// UpdateFileLocation 更新文件的存储地址
func UpdateFileLocation(filehash string, fileaddr string) bool {
	result := DB.Model(&File{}).
		Where("file_hash = ? AND status = 0", filehash).
		Update("file_addr", fileaddr)
	return result.Error == nil
}

// DeleteFileMeta 删除文件元信息
func DeleteFileMeta(filehash string) bool {
	// 软删除，只更新状态
	result := DB.Model(&File{}).
		Where("file_hash = ? AND status = 0", filehash).
		Update("status", 1)
	return result.Error == nil
}

// File 文件表模型

// 在 setup.go 中添加自动迁移
func init() {
	// 在 InitDB 函数中添加
	if DB != nil {
		DB.AutoMigrate(&File{})
	}
}
